#include <iostream>
#include <string.h>
using namespace std;

//函数模板遇上函数重载

//让 类型参数化 === 方便程序员进行编码
//泛型编程
//template 告诉c++编译器 我开始泛型编程了, 看到T 不要随便报错
template <typename T>
void mmyswap(T &a, T &b){
        T c;
        c = a;
        a = b;
        b = c;
        cout<<"我是模板函数 欢迎 call me "<<endl;
}

void mmyswap(int a,  char c){
        cout<<"a = "<<a<<" c = "<<c <<endl;
        cout<<"我是普通函数 欢迎 call me "<<endl;
}

int main04(int argc, char const *argv[]){
        int a = 10;
        char c = 'z';
        mmyswap(a, c); //普通函数的调用: 可以进行隐式的类型转换
        mmyswap(c, a); 

        mmyswap(a, a); //模板函数的调用(本质:类型参数化),  将严格的按照类型进行匹配,不会进行自动类型转换

        return 0; 
}